/*************************************************************************
*File Name: itimer.h
*Author: 侯广臣
*2801059691@qq.com
*Created Time: Tue 02 Feb 2021 10:10:23 AM CST
 ************************************************************************/
#ifndef _ITIMER_H_
#define _ITIMER_H_

#include <time.h>


class C_Timer
{
    private:
        time_t m_startTime;     //启动时间
        time_t m_elapsedTime;   //流逝时间，计时时间
        time_t m_timing;        //超时时间
        bool m_isPause;         //是否暂停状态

    public:
        C_Timer(time_t timing = 0)
            :m_startTime(0), m_elapsedTime(0),m_timing(timing), m_isPause(true){   }
        //是否暂停状态
        bool IsPause()
        {
            return m_isPause;
        }
        //设定超时时间，单位为秒
        time_t SetTiming(time_t timing)
        {
            m_timing = timing;
            return m_timing;
        }

        //开始计时，计时时间累加，返回上次开始计时时间
        time_t Start(void);
        //暂停计时，返回计时时间
        time_t Pause(void);
        //重新计时，计时时间清零，返回上次计时时间
        time_t Restart(void);
        //获取流逝时间，也就是计时时间
        time_t GetElapsedTime(void);
        //是否超时
        bool IsTimeOut(void);
};



class C_ClockTimer
{
    private:
        clock_t m_start;        //开始CPU时钟时间
        clock_t m_elapsed;      //已流逝时钟时间，计时时间
        bool m_isPause;         //是否为暂停状态
        //CPU时钟时间转换秒时间
        double ClockToDouble(clock_t clocks)
        {
            if(clocks == 0)
            {
                return 0;
            }
            return ((double)clocks / CLOCKS_PER_SEC);
        }
    public:
        C_ClockTimer():m_start(0), m_elapsed(0), m_isPause(true){  }

        bool IsPause(void)
        {
            return m_isPause;
        }
        //以下返回计时单位均为：秒
        //开始计时，计时时间不清零，返回上次开始计时时间
        clock_t Start(void);
        //重样开始计时，返回计时时间
        double Restart(void);
        //暂停计时，返回计时时间
        double Pause(void);
        //获取计时时间
        double GetElapsedTime(void);
};
#endif
